package com.bnz.controller;

import com.bnz.entity.Student;
import com.bnz.entity.vo.StudentVo;
import com.bnz.service.StudentService;
import com.bnz.util.PageResult;
import com.bnz.util.R;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

//@RequestBody: 将前端的json串转换为java对象
//@ResponseBody: 将java对象转换为json串

@Controller // 注入到spring容器
@RequestMapping("/stu")
public class StudentController {
    // 引入service
    @Autowired
    private StudentService studentService;

    /**
     * 1、查询所有学生列表
     *
     * @return
     */
    @RequestMapping("/list")
    public ModelAndView list() {
        System.out.println("1111");
        // 1.1、查询所有的学生
        List<Student> all = studentService.findAll();
        System.out.println(all);
        // 1.2、构造ModelAndView
        // student/list:逻辑视图，配和springmvc配置文件使用-》/WEB-INF/JSP/student/list.jsp
        ModelAndView view = new ModelAndView("student/list", "all", all);
        // 1.3、返回
        return view;
    }


    /**
     * 2、查询所有学生（异步操作）
     */
    @GetMapping("findAll")
    @ResponseBody // 通过返回的java对象转换为json串
    public R findAll() {
        // 2.1、查询所有数据
        List<Student> all = studentService.findAll();
        // 2.2、定义统一返回对象
        return R.ok().data("data", all);
    }

    /**
     * 3、分页查询所有学生
     */
    @GetMapping("findByPage")
    @ResponseBody
    public R findByPage(int page, int pagesize) { // 与前端传的名字相对应
        // 3.1、进行分页查询
        PageResult<Student> pr = studentService.findByPage(page, pagesize); // pr是前端的参数(相同命名)
        // 3.2、返回
        return R.ok().data("pr", pr);// "pr"是前端的参数
    }

    /**
     * 4、条件查询带分页
     */
    @PostMapping("search")
    @ResponseBody //将java对象转换为json串
    //@RequestBody: 将前端的json串转换为java对象
    // 这里的vo对象，用来接收前端传过来的参数
    public R search(int page, int pagesize, @RequestBody StudentVo studentVo) {
    // 4.1、进行分页查询
        PageResult<Student> search = studentService.search(page, pagesize, studentVo);
        // 4.2、返回
        return R.ok().data("pr",search); // "pr"是前端传过来的参数
    }

}
